﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ENTIDADES;
using System.Data.SqlClient;
using System.Data;

namespace DATA
{
    public class ClienteDAO
    {
        public static ClienteDAO instance = null;
        public ClienteDAO() { }
        public static ClienteDAO getInstance()
        {
            if (instance == null)
            {
                instance = new ClienteDAO();
            }
            return instance;
        }

        public List<Cliente> listadoCliente(int idTipoCliente)
        {
            List<Cliente> lstResultado = null;
            Conexion strCNN = new Conexion();
            SqlConnection cnn = new SqlConnection(strCNN.obtenerConexion());
            cnn.Open();

            String query = "select idcliente,RUC,DNI,nombres,ap_paterno,ap_materno,telefono,email,idtipocliente from cliente where (idtipocliente=" + idTipoCliente + " OR " + "idtipocliente=2)";
            SqlCommand objComm = new SqlCommand(query, cnn);
            SqlDataReader reader = objComm.ExecuteReader();

            lstResultado = new List<Cliente>();
            while (reader.Read())
            {
               Cliente objCliente = new Cliente();
                objCliente.idcliente = Convert.ToInt32(reader["idcliente"]);
                objCliente.RUC = (reader["RUC"]).ToString();
                objCliente.DNI = (reader["DNI"]).ToString();
                objCliente.nombres = (reader["nombres"]).ToString();
                objCliente.ap_paterno = (reader["ap_paterno"]).ToString();
                objCliente.ap_materno = (reader["ap_materno"]).ToString();
                objCliente.telefono = (reader["telefono"]).ToString();
                objCliente.email = (reader["email"]).ToString();
                objCliente.objTipoCliente = TipoClienteDAO.getInstance().get(Convert.ToInt32(reader["idtipocliente"]));

                lstResultado.Add(objCliente);
            }
            cnn.Close();

            return lstResultado;
        }

        public Cliente get(int idCliente)
        {
            Cliente objCliente = null;

            Conexion strCNN = new Conexion();
            SqlConnection cnn = new SqlConnection(strCNN.obtenerConexion());
            cnn.Open();
            String query = "select RUC,DNI,nombres,ap_paterno,ap_materno,telefono,email,idtipocliente from cliente where idcliente=" + idCliente;
            SqlCommand objComm = new SqlCommand(query, cnn);
            SqlDataReader reader = objComm.ExecuteReader();

            if (reader.Read())
            {
                objCliente = new Cliente();
                objCliente.idcliente = idCliente;
                objCliente.RUC = (reader["RUC"]).ToString();
                objCliente.DNI = (reader["DNI"]).ToString();
                objCliente.nombres = (reader["nombres"]).ToString();
                objCliente.ap_paterno = (reader["ap_paterno"]).ToString();
                objCliente.ap_materno = (reader["ap_materno"]).ToString();
                objCliente.telefono = (reader["telefono"]).ToString();
                objCliente.email = (reader["email"]).ToString();
                objCliente.objTipoCliente = TipoClienteDAO.getInstance().get(Convert.ToInt32(reader["idtipocliente"]));
            }
            cnn.Close();

            return objCliente;
        }

        public void guardarCliente(Cliente p)
        {

            Conexion strCNN = new Conexion();
            SqlConnection cn = new SqlConnection(strCNN.obtenerConexion());
            SqlTransaction trans = null;

            try
            {
                cn.Open();
                trans = cn.BeginTransaction();

                SqlCommand cmd = new SqlCommand("uspGuardarCliente", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = trans;

                cmd.Parameters.AddWithValue("@nombres", p.nombres);
                cmd.Parameters.AddWithValue("@ap_materno", p.ap_materno);
                cmd.Parameters.AddWithValue("@ap_paterno", p.ap_paterno);
                cmd.Parameters.AddWithValue("@dni", p.DNI);
                cmd.Parameters.AddWithValue("@email", p.email);
                cmd.Parameters.AddWithValue("@telefono", p.telefono);
                cmd.Parameters.AddWithValue("@direccion", p.direccion);
                cmd.ExecuteNonQuery();
                trans.Commit();
            }
            catch
            {
                trans.Rollback();
                throw;
            }
            finally
            {
                cn.Close();
            }



        }





    }
}
